<?php

App::import('Sanitize');

class MenuesSenializacionesController extends AppController {

    var $name = 'MenuesSenializaciones';
    var $paginate = array(
        'order' => array('MenuesSenializacione.id ASC'),
        'limit' => 10,
    );

    function beforeFilter() {
        //parent::beforeFilter();
    }

    function index($obras_tipo_id = null, $tipo_senializacion = null, $menues_senializacione_id = null) {
        $this->__aux_index($obras_tipo_id, $tipo_senializacion, $menues_senializacione_id);
    }

    function admin_index($obras_tipo_id = null, $tipo_senializacion = null, $menues_senializacione_id = null) {
        $this->__aux_index($obras_tipo_id, $tipo_senializacion, $menues_senializacione_id);
    }

    /**
     * Lista todos los menues de señalización
     */
    function __aux_index($obras_tipo_id = null, $tipo_senializacion = null, $menues_senializacione_id = null) {
        $this->MenuesSenializacione->recursive = 0;
        $this->paginate['order'] = 'MenuesSenializacione.nombre';

        $condiciones = array();

        $lista_obras_tipo = $this->ObrasTipo->find('list', array('fields' => array('ObrasTipo.id', 'ObrasTipo.nombre'), 'order' => 'ObrasTipo.nombre'));
        $lista_obras_tipo[0] = 'Todas';
        if (!empty($obras_tipo_id))
            $this->data['MenuesSenializacione']['obras_tipo_id'] = $obras_tipo_id;


        $tipos_senializacion = array('Horizontal' => 'Horizontal', 'Vertical' => 'Vertical');
        if (!empty($obras_tipo_id)) {
            $tipos_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $obras_tipo_id),
                        'fields' => array('MenuesSenializacione.tipo', 'MenuesSenializacione.tipo'), 'order' => 'MenuesSenializacione.tipo'));
        }
        $tipos_senializacion[0] = 'Todos';

        if (!empty($tipo_senializacion))
            $this->data['MenuesSenializacione']['tipo'] = $tipo_senializacion;


        $lista_menues_senializacion = array();
        if (empty($obras_tipo_id) && empty($tipo_senializacion)) {
            $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
        } elseif (!empty($obras_tipo_id) && !empty($tipo_senializacion)) {
            $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $obras_tipo_id, 'MenuesSenializacione.tipo' => $tipo_senializacion),
                        'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
        } elseif (!empty($obras_tipo_id) && empty($tipo_senializacion)) {
            $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $obras_tipo_id),
                        'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
        } else {
            $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.tipo' => $tipo_senializacion),
                        'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
        }
        $lista_menues_senializacion[0] = 'Todos';


        if (!empty($menues_senializacione_id))
            $this->data['MenuesSenializacione']['menues_senializacione_id'] = $menues_senializacione_id;

        $nombre = '';


        //si vienen datos del filtro
        if (!empty($this->data)) {

            if (isset($this->data['MenuesSenializacione']['obras_tipo_id']) && !empty($this->data['MenuesSenializacione']['obras_tipo_id'])) {
                $condiciones[] = "ObrasTipo.id = {$this->data['MenuesSenializacione']['obras_tipo_id']}";
            }

            if (isset($this->data['MenuesSenializacione']['obras_tipo_id']) && (!empty($this->data['MenuesSenializacione']['obras_tipo_id']) || ($this->data['MenuesSenializacione']['obras_tipo_id'] == '0'))) {
                $obras_tipo_id = $this->data['MenuesSenializacione']['obras_tipo_id'];
                $this->Session->write('obras_tipo_id', $obras_tipo_id);
            }

            if (isset($this->data['MenuesSenializacione']['tipo']) && !empty($this->data['MenuesSenializacione']['tipo'])) {
                $condiciones[] = "MenuesSenializacione.tipo LIKE '%{$this->data['MenuesSenializacione']['tipo']}%'";
            }

            if (isset($this->data['MenuesSenializacione']['tipo']) && ((!empty($this->data['MenuesSenializacione']['tipo']) || ($this->data['MenuesSenializacione']['tipo'] == '0')))) {
                $tipo_senializacion = $this->data['MenuesSenializacione']['tipo'];
                if (!empty($this->data['MenuesSenializacione']['obras_tipo_id'])) {
                    $tipos_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $this->data['MenuesSenializacione']['obras_tipo_id']),
                                'fields' => array('MenuesSenializacione.tipo', 'MenuesSenializacione.tipo'), 'order' => 'MenuesSenializacione.tipo'));
                } else {
                    $tipos_senializacion = array('Horizontal' => 'Horizontal', 'Vertical' => 'Vertical');
                }
                $tipos_senializacion[0] = 'Todos';
                $this->Session->write('tipo_senializacion', $tipo_senializacion);
                $this->Session->write('tipos_senializacion', $tipos_senializacion);
            }

            if (isset($this->data['MenuesSenializacione']['menues_senializacione_id']) && !empty($this->data['MenuesSenializacione']['menues_senializacione_id'])) {
                $condiciones[] = "MenuesSenializacione.id = {$this->data['MenuesSenializacione']['menues_senializacione_id']}";
            }

            if (isset($this->data['MenuesSenializacione']['menues_senializacione_id']) && ((!empty($this->data['MenuesSenializacione']['menues_senializacione_id']) || ($this->data['MenuesSenializacione']['menues_senializacione_id'] == '0')))) {
                $menues_senializacione_id = $this->data['MenuesSenializacione']['menues_senializacione_id'];
                $obras_tipo_id = $this->data['MenuesSenializacione']['obras_tipo_id'];
                $tipo = $this->data['MenuesSenializacione']['tipo'];
                if (empty($obras_tipo_id) && empty($tipo)) {
                    $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
                } elseif (!empty($obras_tipo_id) && !empty($tipo)) {
                    $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $obras_tipo_id, 'MenuesSenializacione.tipo' => $tipo),
                                'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
                } elseif (!empty($obras_tipo_id) && empty($tipo)) {
                    $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $obras_tipo_id),
                                'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
                } else {
                    $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.tipo' => $tipo),
                                'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
                }
                $lista_menues_senializacion[0] = 'Todos';


                $this->Session->write('menues_senializacione_id', $menues_senializacione_id);
                $this->Session->write('lista_menues_senializacion', $lista_menues_senializacion);
            }

            if (isset($this->data['MenuesSenializacione']['nombre']) && !empty($this->data['MenuesSenializacione']['nombre'])) {
                $menues_senializacione = utf8_encode(strtolower(utf8_decode(trim($this->data['MenuesSenializacione']['nombre']))));
                $condiciones[] = "lower(MenuesSenializacione.nombre) LIKE '%{$menues_senializacione}%'";
                $nombre = $this->data['MenuesSenializacione']['nombre'];
                $this->Session->write('nombre', $nombre);
            }
            $this->Session->write('menu_senializacion_filter', $condiciones);
        } elseif ($this->Session->check('menu_senializacion_filter')) {//si tengo cargado un filtro en session
            //me fijo si esta cambiando de pagina o cambiando el limit
            if (isset($this->params['named']['limit']) || isset($this->params['named']['page'])) {
                //si ya estaba siendo aplicado un filtro, lo sigo usando
                $condiciones = $this->Session->read('menu_senializacion_filter');
                $obras_tipo_id = ($this->Session->check('obras_tipo_id')) ? $this->Session->read('obras_tipo_id') : '';
                $tipo_senializacion = ($this->Session->check('tipo_senializacion')) ? $this->Session->read('tipo_senializacion') : '';
                $tipos_senializacion = ($this->Session->check('tipos_senializacion')) ? $this->Session->read('tipos_senializacion') : array();
                $menues_senializacione_id = ($this->Session->check('menues_senializacione_id')) ? $this->Session->read('menues_senializacione_id') : '';
                $lista_menues_senializacion = ($this->Session->check('lista_menues_senializacion')) ? $this->Session->read('lista_menues_senializacion') : array();
                $nombre = ($this->Session->check('nombre')) ? $this->Session->read('nombre') : '';
            } else {
                //sino, lo borro de la session
                $this->Session->delete('menu_senializacion_filter');
                $this->Session->delete('obras_tipo_id');
                $this->Session->delete('tipo_senializacion');
                $this->Session->delete('tipos_senializacion');
                $this->Session->delete('menues_senializacione_id');
                $this->Session->delete('lista_menues_senializacion');
                $this->Session->delete('nombre');
            }
        }

        $referer = $this->referer();
        $this->paginate['conditions'] = $condiciones;
        $this->set(compact('lista_menues_senializacion', 'menues_senializacione_id', 'lista_obras_tipo', 'obras_tipo_id', 'tipos_senializacion', 'tipo_senializacion', 'nombre', 'referer'));
        $this->set('menuesSenializaciones', $this->paginate());
        $this->render('index');
    }

    function view_tipos_senializacion($obras_tipo_id = null) {
        $this->__aux_view_tipos_senializacion($obras_tipo_id);
    }

    function admin_view_tipos_senializacion($obras_tipo_id = null) {
        $this->__aux_view_tipos_senializacion($obras_tipo_id);
    }

    /**
     *
     * @param <type> $obras_tipo_id
     */
    function __aux_view_tipos_senializacion($obras_tipo_id = null) {
        $this->layout = false;
        $tipos_senializacion = array();

        if (!empty($obras_tipo_id)) {
            $tipos_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $obras_tipo_id),
                        'fields' => array('MenuesSenializacione.tipo', 'MenuesSenializacione.tipo'), 'order' => 'MenuesSenializacione.tipo'));
        } else {
            $tipos_senializacion = array('Horizontal' => 'Horizontal', 'Vertical' => 'Vertical');
        }
        $tipos_senializacion[0] = 'Todos';
        $this->set(compact('obras_tipo_id', 'tipos_senializacion'));
        $this->render('view_tipos_senializaciones');
    }

    function view_menues_senializaciones($obras_tipo_id = null, $tipo_senializacion = null) {
        $this->__aux_view_menues_senializaciones($obras_tipo_id, $tipo_senializacion);
    }

    function admin_view_menues_senializaciones($obras_tipo_id = null, $tipo_senializacion = null) {
        $this->__aux_view_menues_senializaciones($obras_tipo_id, $tipo_senializacion);
    }

    /**
     *
     * @param <type> $obras_tipo_id
     */
    function __aux_view_menues_senializaciones($obras_tipo_id = null, $tipo_senializacion = null) {
        $this->layout = false;
        $lista_menues_senializacion = array();

        if (empty($obras_tipo_id) && empty($tipo_senializacion)) {
            $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
        } elseif (!empty($obras_tipo_id) && !empty($tipo_senializacion)) {
            $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $obras_tipo_id, 'MenuesSenializacione.tipo' => $tipo_senializacion),
                        'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
        } elseif (!empty($obras_tipo_id) && empty($tipo_senializacion)) {
            $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.obras_tipo_id' => $obras_tipo_id),
                        'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
        } else {
            $lista_menues_senializacion = $this->MenuesSenializacione->find('list', array('conditions' => array('MenuesSenializacione.tipo' => $tipo_senializacion),
                        'fields' => array('MenuesSenializacione.id', 'MenuesSenializacione.nombre'), 'order' => 'MenuesSenializacione.nombre'));
        }
        $lista_menues_senializacion[0] = 'Todos';
        $this->set(compact('obras_tipo_id', 'lista_menues_senializacion'));
        $this->render('view_menues_senializaciones');
    }

    function delete($id = null) {
        $this->__aux_delete($id);
    }

    function admin_delete($id = null) {
        $this->__aux_delete($id);
    }

    /**
     * Permite eliminar un menú de señalización seleccionado si no existen elementos de señalización asociados
     * @param <type> $id
     */
    function __aux_delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Menú de señalización inválido', true), 'flash_failure');
        } else {
            // Chequeo que el menú de señalización exista
            $menues_senializacion = $this->MenuesSenializacione->find('all', array('conditions' => array('MenuesSenializacione.id' => $id)));
            if (!empty($menues_senializacion)) {
                $menues_senializacion_name = $menues_senializacion[0]['MenuesSenializacione']['nombre'];
                // Chequeo si hay elementos de señalización asociados
                $elementos_senializacion = $this->ElementosSenializacione->find('all', array('conditions' => array('ElementosSenializacione.menues_senializacione_id' => $id)));
                if (!empty($elementos_senializacion)) {
                    $this->Session->setFlash(__('El menú señalización "' . $menues_senializacion_name . '" no se puede eliminar porque existen elementos de señalización asociados.', true), 'flash_failure');
                } else {
                    if ($this->MenuesSenializacione->delete($id)) {
                        $this->Session->setFlash(__('El menú señalización "' . $menues_senializacion_name . '" se eliminó correctamente.', true), 'flash_success');
                    } else {
                        $this->Session->setFlash(__('El menú señalización no se pudo eliminar. Por favor, intente nuevamente.', true), 'flash_failure');
                    }
                }
            } else {
                $this->Session->setFlash(__('Menú de señalización inválido', true), 'flash_failure');
            }
        }
        $this->redirect(array('action' => 'admin_index'));
    }

    function add($obras_tipo_id = null, $tipo_senializacion = null) {
        $this->__aux_add($obras_tipo_id, $tipo_senializacion);
    }

    function admin_add($obras_tipo_id = null, $tipo_senializacion = null) {
        $this->__aux_add($obras_tipo_id, $tipo_senializacion);
    }

    /**
     * Permite dar de alta un menú de señalización
     */
    function __aux_add($obras_tipo_id = null, $tipo_senializacion = null) {
        $obras_tipo_id = (!empty ($obras_tipo_id)) ? $obras_tipo_id : '';
        $tipo_senializacion = (!empty ($tipo_senializacion)) ? $tipo_senializacion : '';
        if (!empty($this->data)) {
            $menues_senializacion_name = utf8_encode(strtolower(utf8_decode(trim($this->data['MenuesSenializacione']['nombre']))));
            $tipo_senializacion = trim($this->data['MenuesSenializacione']['tipo']);
            $obras_tipo_id = trim($this->data['MenuesSenializacione']['obras_tipo_id']);

            // Chequeo si existe en la db un menú de señalización con el mismo nombre, el mismo tipo de señalización y el mismo tipo de obra
            $menues_senializacion = $this->MenuesSenializacione->find('all', array('conditions' => array('lower(MenuesSenializacione.nombre)' => $menues_senializacion_name, 'MenuesSenializacione.tipo' => $tipo_senializacion, 'MenuesSenializacione.obras_tipo_id' => $obras_tipo_id)));

            if (empty($menues_senializacion)) {
                $this->MenuesSenializacione->create();
                if ($this->MenuesSenializacione->save($this->data)) {
                    $menues_senializacione_id = $this->MenuesSenializacione->id;
                    $this->Session->setFlash(__('El menú señalización se guardó correctamente.', true), 'flash_success');
                    $this->redirect(array('action' => 'admin_index', $obras_tipo_id, $tipo_senializacion, $menues_senializacione_id));
                } else {
                    $this->Session->setFlash(__('El menú señalización no se pudo guardar. Por favor, intente nuevamente.', true), 'flash_failure');
                }
            } else {
                $obras_tipo = $this->ObrasTipo->find('all', array('conditions' => array('ObrasTipo.id' => $obras_tipo_id)));
                $obras_tipo_name = $obras_tipo[0]['ObrasTipo']['nombre'];
                $this->Session->setFlash(__('El menú señalización "' . $this->data['MenuesSenializacione']['nombre'] . '" del tipo de señalización "' . $tipo_senializacion . '", del tipo de obra "' . $obras_tipo_name . '" ya existe.', true), 'flash_failure');
            }
        }
        $tipos_senializacion = array('Horizontal' => 'Horizontal', 'Vertical' => 'Vertical');
        $obras_tipo = $this->ObrasTipo->find('list', array('fields' => array('ObrasTipo.id', 'ObrasTipo.nombre'), 'order' => 'ObrasTipo.nombre'));

        $referer = $this->referer();
        $this->set(compact('obras_tipo', 'obras_tipo_id', 'tipos_senializacion', 'tipo_senializacion', 'referer'));
        $this->render('add');
    }

    function edit($id = null) {
        $this->__aux_edit($id);
    }

    function admin_edit($id = null) {
        $this->__aux_edit($id);
    }

    /**
     * Permite editar un menú de señalización existente
     */
    function __aux_edit($id = null) {
        $obras_tipo_id = 0;
        $tipo_senializacion = 0;
        if (empty($id) && empty($this->data)) {
            $this->Session->setFlash(__('Menú de señalización inválido', true), 'flash_failure');
            $this->redirect(array('action' => 'admin_index'));
        } elseif (empty($this->data)) {
            $this->data = $this->MenuesSenializacione->read(null, $id);
            $obras_tipo_id = $this->data['MenuesSenializacione']['obras_tipo_id'];
            $tipo_senializacion = $this->data['MenuesSenializacione']['tipo'];
        } elseif (!empty($this->data)) {
            $menues_senializacion_name = utf8_encode(strtolower(utf8_decode(trim($this->data['MenuesSenializacione']['nombre']))));
            $obras_tipo_id = trim($this->data['MenuesSenializacione']['obras_tipo_id']);
            $tipo_senializacion = trim($this->data['MenuesSenializacione']['tipo']);

            // Chequeo si existe en la db un menú de señalización con el mismo nombre, el mismo tipo de señalización y el mismo tipo de obra
            $menues_senializacion = $this->MenuesSenializacione->find('all', array('conditions' => array("MenuesSenializacione.id <>" => $id, 'lower(MenuesSenializacione.nombre)' => $menues_senializacion_name, 'MenuesSenializacione.tipo' => $tipo_senializacion, 'MenuesSenializacione.obras_tipo_id' => $obras_tipo_id)));

            if (empty($menues_senializacion)) {
                if ($this->MenuesSenializacione->save($this->data)) {
                    $this->Session->setFlash(__('El menú señalización se guardó correctamente.', true), 'flash_success');
                    $this->redirect(array('action' => 'admin_index', $obras_tipo_id, $tipo_senializacion, $id));
                } else {
                    $this->Session->setFlash(__('El menú señalización no se pudo guardar. Por favor, intente nuevamente.', true), 'flash_failure');
                }
            } else {
                $obras_tipo = $this->ObrasTipo->find('all', array('conditions' => array('ObrasTipo.id' => $obras_tipo_id)));
                $obras_tipo_name = $obras_tipo[0]['ObrasTipo']['nombre'];
                $this->Session->setFlash(__('El menú señalización "' . $this->data['MenuesSenializacione']['nombre'] . '" del tipo de señalización "' . $tipo_senializacion . '", del tipo de obra "' . $obras_tipo_name . '" ya existe.', true), 'flash_failure');
            }
        }
        $tipos_senializacion = array('Horizontal' => 'Horizontal', 'Vertical' => 'Vertical');
        $referer = $this->referer();
        $obras_tipo = $this->ObrasTipo->find('list', array('fields' => array('ObrasTipo.id', 'ObrasTipo.nombre'), 'order' => 'ObrasTipo.nombre'));
        $this->set(compact('obras_tipo', 'obras_tipo_id', 'tipos_senializacion', 'tipo_senializacion', 'referer'));
        $this->render('edit');
    }

}
?>